﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Odbc;
using System.Configuration;

public class ArquivoDAL
{

    public int idnextval { get; set; }
    public int idArquivo { get; set; }
    public string Titulo { get; set; }
    public string Descricao { get; set; }
    public int idTipoArquivo { get; set; }
    public string Arquivo { get; set; }
    public string ArquivoDiretorio { get; set; }

    public string Ativo { get; set; }
    public int idUpdate { get; set; }
    public string DataUpdate { get; set; }
    public int idCadastro { get; set; }
    public string DataCadastro { get; set; }
    public string msgRetorno { get; set; }
    public int codRetorno { get; set; }

    public string comandoDelete = "DELETE FROM tbArquivo WHERE idArquivo = ? ";
    public string comandoSelect = "SELECT * FROM tbArquivo WHERE idArquivo = ? ";
    public string comandoInsert;
    public string comandoUpdate;

    public ArquivoDAL()
    {
        this.idArquivo = next_val();
        this.Titulo = "";
        this.Descricao = "";
        this.idTipoArquivo = 0;
        this.Arquivo = "";
        this.ArquivoDiretorio = "";
        this.Ativo = "S";
        this.idUpdate = 0;
        this.DataUpdate = DateTime.Now.ToString("dd / MM / yyyy h:mm:ss");
        this.idCadastro = 0;
        this.DataCadastro = DateTime.Now.ToString("dd / MM / yyyy h:mm:ss");
    }
    public static List<ArquivoDAL> SelecionarTodos(string param)
    {
        try
        {
            string comandSelectTodos = "SELECT * FROM tbArquivo ";

            if (param != "")
            {
                //comandSelectTodos = "SELECT * FROM tbArquivo WHERE Login LIKE '%" + param.ToString() + "%' ";
                comandSelectTodos = "SELECT * FROM tbArquivo WHERE Arquivo = ?  ";
            }

            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand(comandSelectTodos, con))
            {
                List<ArquivoDAL> lArquivo = new List<ArquivoDAL>();

                cmd.Parameters.Add("@Arquivo", OdbcType.VarChar, 255).Value = param;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {

                    ArquivoDAL oObj = new ArquivoDAL();
                    oObj.idArquivo = Convert.ToInt32(rs["idArquivo"]);
                    oObj.Titulo = rs["Titulo"].ToString();
                    oObj.Descricao = rs["Descricao"].ToString();
                    oObj.idTipoArquivo = Convert.ToInt32(rs["idTipoArquivo"]);
                    oObj.Arquivo = rs["Arquivo"].ToString();
                    oObj.ArquivoDiretorio = rs["ArquivoDiretorio"].ToString();
                    oObj.Ativo = rs["Ativo"].ToString();
                    oObj.idUpdate = Convert.ToInt32(rs["idUpdate"]);
                    oObj.DataUpdate = rs["DataUpdate"].ToString();
                    oObj.idCadastro = Convert.ToInt32(rs["idCadastro"]);
                    oObj.DataCadastro = rs["DataCadastro"].ToString();
                    oObj.msgRetorno = "Registo encontrado";
                    oObj.codRetorno = 0;
                    lArquivo.Add(oObj);
                }
                rs.Close();
                con.Close();
                return lArquivo;
            }
        }
        catch (Exception ex)
        {

            List<ArquivoDAL> lArquivo = new List<ArquivoDAL>();
            ArquivoDAL oObj = new ArquivoDAL();
            oObj.msgRetorno = "Registro nao encontrado";
            oObj.codRetorno = 1;
            lArquivo.Add(oObj);
            return lArquivo;

        }
    } // SelecionarTodos

    public static List<ArquivoDAL> SelecionarTop(int param)
    {
        try
        {
            string comandSelectTodos = "SELECT TOP " + param.ToString() + " * FROM tbArquivo  ";

            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand(comandSelectTodos, con))
            {
                List<ArquivoDAL> lArquivo = new List<ArquivoDAL>();

                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {

                    ArquivoDAL oObj = new ArquivoDAL();
                    oObj.idArquivo = Convert.ToInt32(rs["idArquivo"]);
                    oObj.Titulo = rs["Titulo"].ToString();
                    oObj.Descricao = rs["Descricao"].ToString();
                    oObj.idTipoArquivo = Convert.ToInt32(rs["idTipoArquivo"]);
                    oObj.Arquivo = rs["Arquivo"].ToString();
                    oObj.ArquivoDiretorio = rs["ArquivoDiretorio"].ToString();
                    oObj.Ativo = rs["Ativo"].ToString();
                    oObj.idUpdate = Convert.ToInt32(rs["idUpdate"]);
                    oObj.DataUpdate = rs["DataUpdate"].ToString();
                    oObj.idCadastro = Convert.ToInt32(rs["idCadastro"]);
                    oObj.DataCadastro = rs["DataCadastro"].ToString();
                    oObj.msgRetorno = "Registo encontrado";
                    oObj.codRetorno = 0;
                    lArquivo.Add(oObj);
                }
                rs.Close();
                con.Close();
                return lArquivo;
            }
        }
        catch (Exception ex)
        {

            List<ArquivoDAL> lArquivo = new List<ArquivoDAL>();
            ArquivoDAL oObj = new ArquivoDAL();
            oObj.msgRetorno = "Registro nao encontrado";
            oObj.codRetorno = 1;
            lArquivo.Add(oObj);
            return lArquivo;

        }
    } // SelecionarTop
    
    public int next_val()
    {
        try
        {
            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand("SELECT TOP 1 idArquivo FROM tbArquivo ORDER BY idArquivo DESC ", con))
            {
                idnextval = 1;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {
                    idnextval = Convert.ToInt32(rs["idArquivo"]) + 1;
                }
            }
            return idnextval;

        }
        catch (Exception ex)
        {
            return 0;
        }

    }
    public void SelecionarPorID(int id)
    {
        try
        {
            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand(comandoSelect, con))
            {
                cmd.Parameters.Add("@idArquivo", OdbcType.Int).Value = id;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {
                    this.idArquivo = Convert.ToInt32(rs["idArquivo"]);
                    this.Titulo = rs["Titulo"].ToString();
                    this.Descricao = rs["Descricao"].ToString();
                    this.idTipoArquivo = Convert.ToInt32(rs["idTipoArquivo"]);
                    this.Arquivo = rs["Arquivo"].ToString();
                    this.ArquivoDiretorio = rs["ArquivoDiretorio"].ToString();
                    this.Ativo = rs["Ativo"].ToString();
                    this.idUpdate = Convert.ToInt32(rs["idUpdate"]);
                    this.DataUpdate = rs["DataUpdate"].ToString();
                    this.idCadastro = Convert.ToInt32(rs["idCadastro"]);
                    this.DataCadastro = rs["DataCadastro"].ToString();

                    this.msgRetorno = "Registro encontrado";
                    this.codRetorno = 0;
                }
                rs.Close();
                con.Close();
            }

        }
        catch (Exception ex)
        {
            this.msgRetorno = "Registro não encontrado";
            this.codRetorno = 1;
        }
    } // SelecionarPorID
    public void Insert()
    {
        comandoInsert = "INSERT INTO tbArquivo (idArquivo,Titulo,Descricao,idTipoArquivo ,Arquivo ,ArquivoDiretorio ,Ativo, idUpdate,idCadastro) VALUES (?,?,?,?,?,?,?,?,?) ";
        

        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoInsert, con))
        {
            cmd.Parameters.Add("@idArquivo", OdbcType.Int).Value = this.idArquivo;
            cmd.Parameters.Add("@Titulo", OdbcType.VarChar, 255).Value = this.Titulo;
            cmd.Parameters.Add("@Descricao", OdbcType.VarChar, 255).Value = this.Descricao;
            cmd.Parameters.Add("@idTipoArquivo", OdbcType.Int).Value =  Convert.ToInt32(this.idTipoArquivo);
            cmd.Parameters.Add("@Arquivo", OdbcType.VarChar, 255).Value = this.Arquivo;
            cmd.Parameters.Add("@ArquivoDiretorio", OdbcType.VarChar, 255).Value = this.ArquivoDiretorio;
            cmd.Parameters.Add("@Ativo", OdbcType.VarChar, 255).Value = this.Ativo;
            cmd.Parameters.Add("@idUpdate", OdbcType.Int).Value = Convert.ToInt32(this.idUpdate);
            cmd.Parameters.Add("@idCadastro", OdbcType.Int).Value = Convert.ToInt32(this.idCadastro);

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
           
            this.msgRetorno = "Registro inserido com sucesso";
            this.codRetorno = 0;
        }
    }
    public void Update(int id)
    {
        comandoUpdate = "UPDATE tbArquivo SET Titulo=? ,Descricao=? , idTipoArquivo=?, Arquivo=? , ArquivoDiretorio =? ,Ativo=?,idUpdate=? ,DataUpdate=? WHERE idArquivo = ? ";

        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoUpdate, con))
        {
            cmd.Parameters.Add("@Titulo", OdbcType.VarChar, 255).Value = this.Titulo;
            cmd.Parameters.Add("@Descricao", OdbcType.VarChar, 255).Value = this.Descricao;
            cmd.Parameters.Add("@idTipoArquivo", OdbcType.Int).Value = this.idTipoArquivo;
            cmd.Parameters.Add("@Arquivo", OdbcType.VarChar, 255).Value = this.Arquivo;
            cmd.Parameters.Add("@ArquivoDiretorio", OdbcType.VarChar, 255).Value = this.ArquivoDiretorio;
            cmd.Parameters.Add("@Ativo", OdbcType.VarChar, 255).Value = this.Ativo;
            cmd.Parameters.Add("@idUpdate", OdbcType.Int).Value = this.idUpdate;
            cmd.Parameters.Add("@DataUpdate", OdbcType.VarChar, 255).Value = this.DataUpdate;
            cmd.Parameters.Add("@idArquivo", OdbcType.Int).Value = id;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            this.msgRetorno = "Registro atualizado com sucesso";
            this.codRetorno = 0;
        }
    }

    public void Delete(int id)
    {
        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoDelete, con))
        {

            cmd.Parameters.Add("@idArquivo", OdbcType.Int).Value = id;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    } //Delete
}